import Vue from 'vue'
/* eslint-disable eqeqeq */
/* eslint-disable one-var */
/* eslint-disable no-array-constructor */
/* eslint-disable no-redeclare */
/* eslint-disable no-undef */
import {
  isNULL
} from './validate'
// import QRCode from 'qrcodejs2'

/**
 * 去除字符串首尾两端空格
 * @param {String} str
 * @return {String}
 */
export function trim(str) {
  if (str) {
    return str.replace(/(^\s*)|(\s*$)/g, '')
  } else {
    return ''
  }
}

/**
 * 脱敏
 * @param {String} value 脱敏的对象
 * @return {String}
 */

export function desensitization(value) {
  if (value) {
    var valueNew = ''
    const length = value.length
    // 脱敏：从倒数第五位开始向前四位脱敏
    valueNew = value.split('').map((number, index) => {
      const indexMin = length - 8
      const indexMax = length - 5
      if (index >= indexMin && index <= indexMax) {
        return '*'
      } else {
        return number
      }
    }).join('')
    return valueNew
  } else {
    return ''
  }
}

/**
 * 通过身份证号计算出生日期
 * @param idCard
 */
export function getBirthday(idCard) {
  var birthday = ''
  if (idCard != null && idCard !== '') {
    if (idCard.length === 15) {
      birthday = '19' + idCard.slice(6, 12)
    } else if (idCard.length === 18) {
      birthday = idCard.slice(6, 14)
    }
    birthday = birthday.replace(/(.{4})(.{2})/, '$1-$2-')
    // 通过正则表达式来指定输出格式为:1990-01-01
  }
  return birthday
}

/**
 * 根据身份证计算性别
 * @param idCard
 */
export function getSex(idCard) {
  var sexStr = 0
  if (idCard.length === 15 || idCard.length === 18) {
    if (parseInt(idCard.slice(-2, -1)) % 2 === 1) {
      sexStr = 1
    } else {
      sexStr = 2
    }
  }
  return sexStr
}

/**
 * 格式化时间范围 开始时间00:00:00 结束时间23:59:59
 * @returns {Array}
 */
export function formatterDateRange(dateArray) {
  console.log("dateArray", dateArray)
  if (!isNULL(dateArray)) {
    let begin = formatterDate(dateArray[0])
    let end = formatterDate(dateArray[1])
    return [begin + ' ' + '00:00:00', end + ' ' + '23:59:59']
  }
}
/**
 * 时间加上天数
 * 
 */
export function timeAddDayNum(date, dayNum) {
  if (!isNULL(date)) {
    let d = new Date(date).getTime() + dayNum * 24 * 3600 * 1000
    let time = formatterDate(new Date(d))
    return time + ' ' + '00:00:00'
  }
}

/**
 * 格式化日期
 * @param date
 * @returns {string}
 */
export function formatterDate(date) {
  console.log("as", date)
  if (!isNULL(date)) {
    var day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate()
    var month = (date.getMonth() + 1) > 9 ? (date.getMonth() + 1) : '0' +
      (date.getMonth() + 1)
    return date.getFullYear() + '-' + month + '-' + day
  }
}
/**
 * 获取每个月一号
 */
export function getDateMonth01(date) {
  var d = new Date();
  var year = d.getFullYear()
  var month = (d.getMonth() + 1) < 10 ? '0' + (d.getMonth() + 1) : d.getMonth() + 1
  return year + "-" + month + "-01" + ' ' + '00:00:00'
}
/**
 * 判断时间大小
 * @param date {string}
 */
export function compareDate(date1, date2) {
  console.log("11", date1)
  if (!date2) date2 = new Date();
  if (new Date(date1).getTime() > date2.getTime()) return true
  else return false
}
/**
 * 格式化时间
 * @param date
 * @returns {string}
 */
export function formatterDateTime(date) {
  if (!isNULL(date)) {
    var day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate()
    var month = (date.getMonth() + 1) > 9 ? (date.getMonth() + 1) : '0' +
      (date.getMonth() + 1)
    var hours = (date.getHours() > 9 ? (date.getHours()) : '0' + (date.getHours()))
    var minutes = (date.getMinutes() > 9 ? (date.getMinutes()) : '0' + (date.getMinutes()))
    var seconds = (date.getSeconds() > 9 ? (date.getSeconds()) : '0' + (date.getSeconds()))
    return date.getFullYear() + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
  }
}

/**
 * 格式化不带秒的时间
 * @param te
 * @returns {string}
 */
export function formatterDateTimeWithOutSec(te) {
  if (te != null) {
    var date = new Date(te)
    var day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate()
    var month = (date.getMonth() + 1) > 9 ? (date.getMonth() + 1) : '0' +
      (date.getMonth() + 1)
    var hours = (date.getHours() > 9 ? (date.getHours()) : '0' + (date.getHours()))
    var minutes = (date.getMinutes() > 9 ? (date.getMinutes()) : '0' + (date.getMinutes()))
    return date.getFullYear() + '-' + month + '-' + day + ' ' + hours + ':' + minutes
  } else {
    return '--'
  }
}

/**
 * 获取 blob
 * @param  {String} url 目标文件地址
 * @return {cb}
 */
function getBlob(url, cb) {
  var xhr = new XMLHttpRequest()
  xhr.open('GET', url, true)
  xhr.responseType = 'blob'
  xhr.onload = function () {
    if (xhr.status === 200) {
      cb(xhr.response)
    }
  }
  xhr.send()
}

/**
 * 二进制文件下载
 * @param responseData 二进制内容
 * @fileName 导出的文件名称
 */
export function dowload(responseData, fileName) {
  let blob = responseData;
  // let blob = new Blob([responseData])
  let elink = document.createElement('a')
  // if (fileName.indexOf('/')) {
  //   fileName = fileName.substr(fileName.lastIndexOf('/') + 1)
  // }
  elink.download = fileName
  elink.style.display = 'none'
  elink.target = '_blank'
  elink.href = URL.createObjectURL(blob)
  document.body.appendChild(elink)
  elink.click()
  URL.revokeObjectURL(elink.href) // 释放URL对象
  document.body.removeChild(elink)
}

/**
 * url文件下载
 * @param responseData 二进制内容
 * @fileName 导出的文件名称
 */
export function dowloadByUrl(url, fileName) {
  getBlob(url, function (blob) {
    let blob1 = new Blob([blob])
    let elink = document.createElement('a')
    if (fileName.indexOf('/')) {
      fileName = fileName.substr(fileName.lastIndexOf('/') + 1)
    }
    elink.download = fileName
    elink.style.display = 'none'
    elink.target = '_blank'
    elink.href = URL.createObjectURL(blob1)
    document.body.appendChild(elink)
    elink.click()
    URL.revokeObjectURL(elink.href) // 释放URL对象
    document.body.removeChild(elink)
  })
}
export function downloadFile(url, fileName) {
  var a = document.createElement('a')
  a.href = url
  a.download = fileName
  a.style.display = 'none'
  document.body.appendChild(a)
  a.click()
  a.remove()
}
/**
 * 将对象的组织机构属性转为数组
 * @param obj
 * @returns {[]}
 */
export function getOrgArray(obj) {
  let orgArray = []
  if (obj.province && obj.province > 0) {
    orgArray.push(obj.province)
  }
  if (obj.city && obj.city > 0) {
    orgArray.push(obj.city)
  }
  if (obj.county && obj.county > 0) {
    orgArray.push(obj.county)
  }
  if (obj.street && obj.street > 0) {
    orgArray.push(obj.street)
  }
  if (obj.community && obj.community > 0) {
    orgArray.push(obj.community)
  }
  if (obj.subarea && obj.subarea > 0) {
    orgArray.push(obj.subarea)
  }
  return orgArray
}

/**
 * 动态生成二维码
 * @param elRef 生成二维码div的ref值
 * @param elId 生成二维码div的id
 * @param content 生成二维码的内容
 * @param size 二维码的尺寸大小
 */
export function createQrcode(elRef, elId, content, size) {
  // 每次先清空，以免生成多个
  document.getElementById(elId).innerHTML = ''
  // eslint-disable-next-line no-unused-vars,no-new
  new QRCode(elRef, {
    text: content, // 需要转换为二维码的内容
    width: size === undefined ? 150 : size,
    height: size === undefined ? 150 : size,
    colorDark: '#000000',
    colorLight: '#ffffff',
    correctLevel: QRCode.CorrectLevel.H
  })
}

/**
 * 身份证校验
 * @param idcode
 * @returns {boolean}
 * @constructor
 */
export function IdentityCodeValid(idcode) {
  // 加权因子
  var weightFactor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  // 校验码
  var checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']

  var code = idcode + ''
  var last = idcode[17] // 最后一位

  var seventeen = code.substring(0, 17)

  // ISO 7064:1983.MOD 11-2
  // 判断最后一位校验码是否正确
  var arr = seventeen.split('')
  var len = arr.length
  var num = 0
  for (var i = 0; i < len; i++) {
    num = num + arr[i] * weightFactor[i]
  }
  // 获取余数
  var resisue = num % 11
  var lastNo = checkCode[resisue]

  // 格式的正则
  // 正则思路
  /*
  第一位不可能是0
  第二位到第六位可以是0-9
  第七位到第十位是年份，所以七八位为19或者20
  十一位和十二位是月份，这两位是01-12之间的数值
  十三位和十四位是日期，是从01-31之间的数值
  十五，十六，十七都是数字0-9
  十八位可能是数字0-9，也可能是X
  */
  var idcardPatter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0-9][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/

  // 判断格式是否正确
  var format = idcardPatter.test(idcode)

  // 返回验证结果，校验码和格式同时正确才算是合法的身份证号码
  return !!(last === lastNo && format)
}

/**
 * 是否包含中文
 * @param str
 * @returns {boolean}
 */
export function containChinese(str) {
  if (/.*[\u4e00-\u9fa5]+.*$/.test(str)) {
    return true
  }
  return false
}

/**
 * 格式化时间
 * @param str
 * @returns {boolean}
 */
export function DateFormat(dateTime) {
  var dateParse = Date.parse(new Date(dateTime))
  var time = new Date(dateParse)
  var y = String(time.getFullYear())
  var m = String(time.getMonth() + 1)
  var d = String(time.getDate())
  var h = String(time.getHours())
  var u = String(time.getMinutes())
  var s = String(time.getSeconds())
  if (m.length < 2) m = '0' + m
  if (d.length < 2) d = '0' + d
  if (h.length < 2) h = '0' + h
  if (u.length < 2) u = '0' + u
  if (s.length < 2) s = '0' + s
  return y + '-' + m + '-' + d + ' ' + h + ':' + u + ':' + s
}
/**
 * 单元格样式设置
 * @param row 行
 * @param column 列
 * @param rowIndex 行序
 * @param columnIndex 列序
 * @returns {string}
 */
export function getTableCellStyle(row, column, rowIndex, columnIndex) {
  if (column.label === '证件号码') {
    // 身份证验证，身份证中不包含中文，同时只有证件类型为身份证的需要验证
    if (containChinese(row.idNumber) === false && row.idNumberType === 1) {
      if (IdentityCodeValid(row.idNumber) === false) {
        return 'color:red;'
      }
    }
  } else if (column.label === '年龄') {
    // 年龄验证
    if (row.age == null) {
      return 'color:red;'
    } else {
      if (row.age < 0 || row.age > 120) {
        return 'color:red;'
      } else if (row.age >= 100 && row.age <= 120) {
        return 'color:green;'
      }
    }
  } else if (column.label === '手机号') {
    // 手机号码验证
    // 8位是固定电话，12位带区号固话，11位手机号，20位，8位固话+11位手机号+1位分隔符
    // 23位2个手机号+1位分隔符 24位12位固话+11位手机+1位分隔符
    if (row.mobile) {
      if (row.mobile.length !== 8 && row.mobile.length !== 12 && row.mobile.length !== 11 &&
        row.mobile.length !== 20 && row.mobile.length !== 23 && row.mobile.length !== 24) {
        if (row.mobile.length === 0) {
          return 'color:red;'
        } else {
          return 'color:red;'
        }
      }
    } else {
      return 'color:red;'
    }
  }
}

/**
 * 拼接img路径
 */
export function jointImgUrl(imgList) {
  let base = window.SITE_CONFIG.baseUrl
  let token = Vue.cookie.get('token')
  imgList.map(item => {
    item.url = `${base}/file/download/?objectName=${item.objectName}&token=${token}`
  })
  return imgList
}

/**
 * 拼接imgbase64
 */
export function jointImgBase64(imgList) {
  imgList.map(item => {
    item.url = `data:${item.contentType};base64,${item.content}`
  })
  return imgList
}
/**
 * 拼接单个imgbase64
 */
export function jointSingleImgBase64(file) {
  return `data:${file.contentType};base64,${file.content}`
}

export function dataURLtoBlob(base64, type) {
  let bstr = atob(base64, type),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n); // 转换编码后才可以使用charCodeAt 找到Unicode编码
  }
  return new Blob([u8arr], {
    type,
  });
}

/**
 * 计算文件大小
 * @param {文件大小byte} size
 * @returns
 */
export function computeFileSize(size) {
  var sizeStr = "";
  if (size < 1024) {
    //小于1KB，则转化成B
    sizeStr = size.toFixed(2) + "B";
  } else if (size < 1024 * 1024) {
    //小于1MB，则转化成KB
    sizeStr = (size / 1024).toFixed(2) + "KB";
  } else if (size < 1024 * 1024 * 1024) {
    //小于1GB，则转化成MB
    sizeStr = (size / (1024 * 1024)).toFixed(2) + "MB";
  } else {
    //其他转化成GB
    sizeStr = (size / (1024 * 1024 * 1024)).toFixed(2) + "GB";
  }
  var index = sizeStr.indexOf("."); //获取小数点处的索引
  var dou = sizeStr.substr(index + 1, 2); //获取小数点后两位的值
  if (dou == "00") {
    //判断后两位是否为00，如果是则删除00
    return sizeStr.substring(0, index) + sizeStr.substr(index + 3, 2);
  }
  return sizeStr;
}